iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Modern Web

30天前端網頁技術超入門介紹系列 第 22

Day22. Hoisting 的觀念

  • 分享至 

  • xImage
  •  

Hoisting 是什麼?

還記得我們昨天說的執行環境分為創建執行兩個階段嗎?創建階段時的記憶體內有基本的全域變數this 以及外部環境,而當程式碼被解析器解析的時候,他會知道你宣告的變數和 function 在哪裡,從而把他們加入記憶體中,佔據一個空位。加入記憶體的動作就叫做 Hoisting(提升)

因為變數與 function 已經在記憶體中了,所以當程式碼在執行階段的時候就可以找到他們。

基礎觀念

Hoisting 一個有趣的特性,他可以使變數和 function 的宣告看起來移到程式的最上面。說是看起來,實際上是因為程式碼還在原本的位置上。
變數的 Hoisting 僅有宣告的部分,值並不會跟著 Hoisting。

console.log(a); // undefined
var a = '鯊魚';

function 的 Hoisting,可以先呼叫 function,接著才在下面繼續設計你的 function,不用事後搬來搬去。

shark(); // aaaaaaaaaa
function shark(){
    console.log('aaaaaaaaaa');
}

還記得 function 陳述式和表達式嗎? 介紹
當 function 使用表達式的時候,只會顯示 is not defined 喔。因為變數先 Hoisting 後直接執行 shark(),出現錯誤後程式碼會直接停止不往下運行,所以並沒有執行到賦予變數 function 的步驟。

shark();
var shark = function(){
    console.log('aaaaaaaaaa');
}

知道 Hoisting 後,你可能會想說既然 function 會 Hoisting 了,那2個 function 同時呼叫的話呢?會有先後順序嗎?

function a(){
    b();
}
function b(){
    a();
}
b();

不會喔~ 兩個會同時執行喔!b 呼叫 a,a 呼叫 b...無限重複。

以上就是基礎介紹了,假如你想了解更多關於 Hoisting 可以參考這篇文章 我知道你懂 hoisting,可是你了解到多深?


又是還沒想好明天要幹嘛的一天,也許看看清單有什麼好寫的吧~


上一篇
Day21. JavaScript 的執行環境與作用域
下一篇
Day23. ES6(一) - let、const 可能會忽略的小細節
系列文
30天前端網頁技術超入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言